[小ネタ]AWS CloudFormationでアップデートスタックを禁止してみた
CloudFormationで環境を作った後で、スタックのアップデートを禁止したいことがあります。
スタックが複数あるとアップデートの対象を間違えそうになるからです。
既存のスタックに対してスタックポリシーを適用し、アップデートから保護してみました。
全てのリソースのアップデートを禁止する
全てのリソースのアップデートを禁止するスタックポリシーを作成します。
以下の内容をファイルに保存します。
今回はDenyUpdateStackPolicy.json
として保存しました。
{ "Statement" : [ { "Effect" : "Deny", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }
DenyUpdateStackPolicy.json
をS3にアップロードします。
AWS CLIを実行し、ポリシーを適用します。
$ aws cloudformation set-stack-policy --stack-name YourStackName --stack-policy-url https://s3-ap-northeast-1.amazonaws.com/YourBucketName/DenyUpdateSt ackPolicy.json
CloudFormationコンソールを確認します。
スタックポリシーが反映されています。
スタックをアップデートすると、イベント「UPDATE_FAILED」が発生します。
メッセージは以下の通りです。
スタックポリシーによって、アップデートが禁止されたことがわかります。
Action denied by stack policy: Statement [#1] does not allow [Update:] for resource [];
アップデートを許可する
アップデートの保護を解除します。 スタックポリシーは削除できないため、明示的に許可を与えるポリシーを記載します。
{ "Statement" : [ { "Effect" : "Allow", "Action" : "Update:*", "Principal": "*", "Resource" : "*" } ] }
おわりに
スタックポリシーを使って、既存のCloudFormationスタックのアップデートを禁止してみました。
リソースやConditionを指定すれば、特定のリソースのみ禁止するといったことも出来ます。